PowerMock 中如何使用mock类的构造函数

您所在的位置:网站首页 mockito cannot mock this class PowerMock 中如何使用mock类的构造函数

PowerMock 中如何使用mock类的构造函数

#PowerMock 中如何使用mock类的构造函数| 来源: 网络整理| 查看: 265

背景:

在日常编写代码的过程中,我们经常会在方法内部new很多的其他类对象来进行编码工作,那么对于这种情况怎么让new出来的对象是一个我们特意创建出来的一个mock实例,从而让我们能完全控制new出来的对象的所有行为呢?本文就来讲解下如何在powermock中mock类的构造函数。

技术实现:

首先我们先看下要被new的实例对象,如下所示:

public class Order { private Integer orderId; private Date createTime; public Order() {} public Order(Integer orderId, Date createTime) { this.orderId = orderId; this.createTime = createTime; } public void insertOrder() { throw new UnsupportedOperationException("this operate is not support"); } }

然后我们在创建一个服务类,服务类中会调用new方法创建对象,并调用new出来的对象的方法

public class OrderService { public void saveOrder(Integer orderId, Date createtime) { Order order = new Order(orderId, createtime); order.insertOrder(); } }

最后,我们再看下如何使用powermock的whenNew方法mock特定某个类实例的构造方法,让我们可以自由操作new返回的对象的行为

import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import java.util.Date; @RunWith(PowerMockRunner.class) // 这里是调用构造方法的类,不是被mock构造函数的类本身 @PrepareForTest({OrderService.class}) public class OrderServiceTest { @Mock private Order order; @Test public void saveOrderWithConcreteArgumentsTest() throws Exception { Integer orderId = 10000; Date createtime = new Date(); PowerMockito.whenNew(Order.class).withArguments(orderId, createtime).thenReturn(order); PowerMockito.doNothing().when(order).insertOrder(); OrderService orderService = new OrderService(); orderService.saveOrder(orderId, createtime); Mockito.verify(order).insertOrder(); } @Test public void saveOrderWithAnyArgumentsTest() throws Exception { Integer orderId = 10000; Date createtime = new Date(); PowerMockito.whenNew(Order.class).withAnyArguments().thenReturn(order); PowerMockito.doNothing().when(order).insertOrder(); OrderService orderService = new OrderService(); orderService.saveOrder(orderId, createtime); Mockito.verify(order).insertOrder(); } }

通过上面的powermock模拟实例的构造函数的例子,我们可以做到模拟类实例的创建



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3